Skulls, as alterações nas sources que mencionei se aplicam somente ao caso do sistema da PxG. Essa estátua pode ser escrita puramente em Lua. Entretanto, ainda é preciso de mais algumas informações quanto ao sistema de ataque dela (se será de x em x tempo, constante; chance de ativação, em tempo constante ou variável/aleatório; etc). Se o autor puder informar-nos quanto a isso, suponho que não haverão mais dúvidas para começar a escrita dos pedidos.
Bom, em relação a chance de ataque, tempo .. fica a criterio de vocês tudo isso, pode cria a spell qualquer coisa eu modifico isso, pode ser de 2 em 2 segundos os ataques da estatua "ataque em death" lembrando que ela apos conjurada ataque todos que estive a 5 sqm dela em target aleatoriamente "so não ataque quem a sumonou"
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Sim, claro são dois contextos separados. Eu queria saber pq fiz em lua uma forma de monstros lutarem entre si e fiquei pensando se com npcs seria mais fácil. Mas essa questão de vida e de morrer complica.Skulls, as alterações nas sources que mencionei se aplicam somente ao caso do sistema da PxG. Essa estátua pode ser escrita puramente em Lua. Entretanto, ainda é preciso de mais algumas informações quanto ao sistema de ataque dela (se será de x em x tempo, constante; chance de ativação, em tempo constante ou variável/aleatório; etc). Se o autor puder informar-nos quanto a isso, suponho que não haverão mais dúvidas para começar a escrita dos pedidos.
Alguém vai poder me ajudar referente a isso?
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

eu te ajudo no primeiro e no terceiro porque to curioso em como o Zipter vai fazer o segundo..
Só aguenta eu ter um tempo maior livre pra sentar e testar isso pra não te entregar um código feito às pressas e que pode ter bugs.
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

eu te ajudo no primeiro e no terceiro porque to curioso em como o Zipter vai fazer o segundo..
Só aguenta eu ter um tempo maior livre pra sentar e testar isso pra não te entregar um código feito às pressas e que pode ter bugs.
Acabei fazendo a 2 aqui de bobeira xD
Tente isso:
<instant name="Statue Attack" words="utevo res statue" lvl="1" mana="500" prem="0" exhaustion="20000" groups="1,4000" icon="23" needlearn="0" event="script" value="attack/statue.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
<vocation id="5"/>
<vocation id="6"/>
<vocation id="7"/>
<vocation id="8"/>
</instant>
Em um arquivo chamado statue.lua, dentro de spells/attack coloque o codigo:
local config = {
statue = 1444,
range = 5,
max_dmg = -150,
min_dmg = -50,
hit_delay = 1000,
statue_time = 10*1000,
cd = 20,
stg = 5570
}
local max_hits = config.statue_time/config.hit_delay
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, 0, config.min_dmg, 0, config.max_dmg)
local condition = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition, CONDITION_PARAM_TICKS, 10 * 1000)
function removeItem(pos)
doRemoveItem(getTileItemById(pos, config.statue).uid)
end
function attackSpecs(cid, pos, var, hits)
n = hits or 0
if n >= max_hits then return false end
local spec = getSpectators(pos, config.range, config.range)
i = spec[math.random(1, #spec)]
if #spec <= 1 then return false end
while(i == cid) do
i = spec[math.random(1, #spec)]
end
if isCreature(i) then
var.pos = getCreaturePosition(i)
doSendDistanceShoot(pos, var.pos, CONST_ANI_SUDDENDEATH)
doCombat(cid, combat, var)
end
addEvent(attackSpecs, config.hit_delay, cid, pos, var, n+1)
end
function itemInteraction(cid, pos, var)
attackSpecs(cid, pos, var)
addEvent(removeItem, config.statue_time, pos)
end
function onCastSpell(cid, var)
if not isPlayer(cid) then return false end
if getPlayerStorageValue(cid, config.stg) - os.time() <= 0 then
doAddCondition(cid, condition)
setPlayerStorageValue(cid, config.stg, os.time() + config.cd)
local pos = Position(getCreaturePosition(cid).x+1, getCreaturePosition(cid).y, getCreaturePosition(cid).z)
doCreateItem(config.statue, 1, pos)
itemInteraction(cid, pos, var)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
return true
end
Me dê retorno.
gif dela:

Abraços,
ps: você não deu maiores detalhes como no que depende o dano, velocidade dos hits, nem cooldown, qual estatua usar, etc. Então fiz do jeito que preferi, mas é altamente customizável basta mexer/pedir.
Editado Fevereiro 11 por Skulls
Retornei , irei testar e retorno pra avisar!
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Terceira:
<instant name="Skell Summon" words="utevo res skell" lvl="1" mana="500" prem="0" exhaustion="1" groups="1,1" icon="23" needlearn="0" event="script" value="attack/skellsummon.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
<vocation id="5"/>
<vocation id="6"/>
<vocation id="7"/>
<vocation id="8"/>
</instant>
local config = {
creature = "Demon",
summon_time = 15*1000,
cd = 20,
stgs = {cd = 5571, remove = 5572},
life_percent = 20
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
local condition = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition, CONDITION_PARAM_TICKS, 15 * 1000)
function removeSummon(cid)
if getPlayerStorageValue(cid, config.stgs.remove) == -1 then return false end
if not isPlayer(cid) then return false end
summons = getCreatureSummons(cid)
for _, i in pairs(summons) do
if isCreature(i) then
if getCreatureName(i) == config.creature then
doRemoveCreature(i)
setPlayerStorageValue(cid, config.stgs.remove, -1)
doRemoveCondition(cid, CONDITION_INFIGHT)
return true
end
end
end
return false
end
function onCastSpell(cid, var)
if not isPlayer(cid) then return false end
if getPlayerStorageValue(cid, config.stgs.remove) ~= -1 then
summons = getCreatureSummons(cid)
for _, i in pairs(summons) do
if isCreature(i) then
if getCreatureName(i) == config.creature then
doRemoveCreature(i)
setPlayerStorageValue(cid, config.stgs.remove, -1)
doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*config.life_percent/100)
doCombat(cid, combat, var)
doRemoveCondition(cid, CONDITION_INFIGHT)
return true
end
end
end
return false
end
if getPlayerStorageValue(cid, config.stgs.cd) - os.time() <= 0 then
doAddCondition(cid, condition)
setPlayerStorageValue(cid, config.stgs.cd, os.time() + config.cd)
setPlayerStorageValue(cid, config.stgs.remove, 1)
doCombat(cid, combat, var)
monster = doSummonCreature(config.creature, getCreaturePosition(cid))
doConvinceCreature(cid, monster)
addEvent(removeSummon, config.summon_time, cid)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
return true
end
Testa ai e ve se ta no jeito.
PS: mude o nome de Demon para o monstro que você quiser.
Abraços,
EDITADO:
SOBRE A PRIMEIRA SPELL ELA EH AREA 3x3 EM VOLTA DO PLAYER OU DIRECIONADA?
Editado Fevereiro 10 por Skulls
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

faz atacar só um target dos specs, todos fica zoado. Aí fica semelhante à torre do league
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

faz atacar só um target dos specs, todos fica zoado. Aí fica semelhante à torre do league
Tambem acho, mas pelo pedido dele acho que são todos mesmo, não?
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

lembrando que ela apos conjurada ataque todos que estive a 5 sqm dela em target aleatoriamente
não sei dizer... eu entendi q queria que atacasse todos mas um por vez, de forma aleatoria.
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Hm, pode ser. Mudarei isso então, fica até mais simples, pq ao inves de for terá um random. xDnão sei dizer... eu entendi q queria que atacasse todos mas um por vez, de forma aleatoria.
Editei la da forma que você sugeriu.
Fiz a spell1 do jeito que eu entendi, não sei se está do jeito que você queria mas com alguns ajustes chegamos lá:
<instant name="Spell1" words="baratask spell1" lvl="1" mana="100" prem="0" exhaustion="20000" groups="1,2000" icon="23" needlearn="0" event="script" value="attack/spell1.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
<vocation id="5"/>
<vocation id="6"/>
<vocation id="7"/>
<vocation id="8"/>
</instant>
local config = {
cd = 20,
hit_delay = 2000,
stg = 5573,
life_percent = 5,
mana_percent = 10,
hits = 3
}
local combat = createCombatObject()
local area = createCombatArea(AREA_SQUARE3X3)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatArea(combat, area)
function onTargetCreature(cid, target)
if not isCreature(target) then return false end
local healthDmg = -getCreatureHealth(target)*config.life_percent/100
local manaDmg = -getCreatureMana(target)*config.mana_percent/100
doSendMagicEffect(getCreaturePosition(target), CONST_ME_MAGIC_RED)
doTargetCombatHealth(cid, target, COMBAT_LIFEDRAIN, healthDmg, healthDmg, CONST_ME_MAGIC_RED)
doTargetCombatMana(cid, target, manaDmg, manaDmg, CONST_ME_MAGIC_BLUE)
return true
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function attack(cid, var, hits)
n = hits or 0
if n >= config.hits then return false end
doCombat(cid, combat, var)
addEvent(attack, config.hit_delay, cid, var, n+1)
end
function onCastSpell(cid, var)
if not isPlayer(cid) then return false end
if getPlayerStorageValue(cid, config.stg) - os.time() <= 0 then
setPlayerStorageValue(cid, config.stg, os.time() + config.cd)
attack(cid, var)
else
doPlayerSendCancel(cid, "You're exhausted.")
end
return true
end
Up, e ao cara funcionou?!
Editado Fevereiro 11 por Skulls
Sim, de forma aleatoria rs, mas vlw mesmo pela força de vcs to muito grato pela atenção.
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Por nada cara. Mais alguma coisa ou tudo resolvido?Sim, de forma aleatoria rs, mas vlw mesmo pela força de vcs to muito grato pela atenção.
Caso esteja, marque como resolvido para moverem o tópico. Abraços!
Editado Fevereiro 12 por Skulls




info
Grupo: Campones
Registrado: 06/06/08
Posts: 29
Reputação: +3
Bom, estou muito agradecido por vocês estarem se empenhando para me ajudar, eu estou desenvolvendo 1 projeto que na verdade é um sonho que estou realizando eu sou um pouco leigo em relação a criação de scripts e programação, sou um mero mapper, mas sempre que posso mecho com script.
obrigado, aguardo resultado de vcs para me ajudar com esses 3 pedidos, de coração mesmo!
Segue link do projeto: http://www.xtibia.com/forum/topic/239277-worldofempera-rpg/